An application execution environment is a virtualization environment that works in conjunction with the native services (e.g., an operating system) of a computing device to provide a consistent well-defined environment in which applications can be loaded and executed. An application execution environment typically includes facilities such as memory management (e.g., garbage collection), standard libraries, media decoders, user interface frameworks and input-output interfaces. An application designed to run within an application execution environment can often be developed rapidly because developers can rely on the consistency of the application execution environment—even if the environment itself exists on widely varying systems.
An application execution environment can load an application from an encoded representation of the application. For example, the encoded representation can have a pre-defined syntactic structure such as a programming language (e.g., source code) or can include well-defined virtual instructions (e.g., platform-independent bytecode, such as Macromedia Flash® bytecode). To load applications the application execution environment decodes the encoded representation of the application into instructions and executes the instructions of the application. Application execution environments are sometimes referred to as interpreters or virtual machines.
When the loaded application is executed, the resources that the application is allowed to access are controlled by the application execution environment. For example, if an application is downloaded from the Internet, the application may be allowed to display information and receive user input, but may not be allowed to access an attached storage device.
An application can be classified such that the application's classification identifies a particular isolation environment within the execution environment with which the application is loaded. An application that has a different classification is loaded into a different isolation environment. An application loaded using one isolation environment is prevented from accessing, modifying or interfering with an application loaded using a different isolation environment. However, it is often desirable for an author of an application to reuse functionality of one application within another application, even if the two applications do not share the same classification.
Some application execution environments allow applications to explicitly establish inter-isolation-environment communication channels. Typically one or both of the applications must be explicitly designed to exchange data through an established channel.